Account Events Lifecycle Guide

Important: Although this guide focuses on savings account events, the lifecycle information is applicable to other kinds of bank account too, including current accounts.

This guide describes a sample lifecycle for bank account events. It focuses on a saving account (without term), but the lifecycle information is applicable to other kinds of bank account too, including current accounts. We won't be able to explore everything that can happen in an account, but it should give you a good idea of the major events you can expect in such an account. For clarity, we're focusing on user initiated transactions. System managed activities, such as Capitalization of interest schedule are not shown. 

Scenario

In this scenario, we're assuming that the origination/onboarding process which initiates account creation have already happened, and that an API is initiated to create the account.

We begin with creation, then move onto setting up an overdraft limit (this can be set at the product level too, and isn't mandatory, but could be amended at the account level). A credit occurs, and the lifecycle assumes the subsequent debt, which utilises - and can also age - the overdraft facility. The overdraft is never paid, and the account reaches dormancy, and is subsequently closed. We'll deal with each of these stages in detail in the sections below, and look at the event payloads.

Note: Dormancy can happen automatically as well, but in our example, it's actioned manually.

Lifecycle Diagram

To keep things simple, the lifecycle is shown as a straightforward, linear timeline. 

Legend

API

The API URL that's used to carry out this business process.

API action

API request (typically, a command to perform an operation).

Event The event type that's emanated. 
Event Business event emanating after the process is completed by the system. 
Business process Business process in the system.
End of business process Completion of the business process in the system. 

Tip: Click diagram to expand.

 

Savings Account Events: Example Lifecycle

 

Account Creation

API
The API that's used to create the savings account.

/v1.0.0/holdings/accounts/savingsAccounts/

 

Event
The event that's emanated at account creation.

accounts.createAccount.accountCreated

 

Event Payload

baseDetails

Typically contains all the basic account information – such as the account reference, system name, transaction reference, and the effective date of the event - and is defaulted for all events.

feeDetails

Contains the fee that's incurred when performing this transaction. It's useful for passing details to pricing systems which can compute benefits on top of the fee. The object is populated only if a fee is incurred.

accountsBaseDetails Carries the overdraft and dormancy statuses (TBCs can have multiple OD and Dormancy statuses, and are configurable).If the account is a multi-currency (MCY) account, it also carries the MCY details and their individual balances. Not populated if the account is a normal account.  
balances Contains an array of balances affected by the transaction. 
alternateReferences Carries the list of alternate references that have been recorded for this account as Type/ID pair.

Note: All the subsequent objects carry the individual, salient property details of the account, such as the parties involved, the repayment schedule(capitalisation frequency), limits, renewal details, and so on.

Sample Code: Account Creation Event Payload
{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
  "productName": "dddddddd",
  "originalContractDate": "ee",
    
    "baseDetails": [
      {
        "contractReference": "DDDDDD",
        "systemReference": "CCCC",
        "companyReference": "BBBBB",
        "eventName": "",
        "baseEventIdentifier": "b",
        "effectiveDate": "ddddddddd",
        "bookingDate": "EEEE",
        "contractCurrency": "AAAAAA",
        "channel": "BBBBBBBB",
        "branch": "eeeeee",
        "lineOfBusiness": "CCCCCCCC",
        "activityDateTimeStamp": "ccccccccc",
        "transactionReference": "ddddd",
        "reversalIndicator": false,
        "originationReference": "",
        "contractStatus": "BBB",
        "accountId": "BBBBB",
        "overdue": "",
        "feeDetails": [
          {
            "feeName": "DDDDDDD",
            "feeAmount": "",
            "feeCurrency": "bbbbb",
"adjustFeeAmount": "aaaa",
            "adjustFeeReason": ""
          }
        ],
        "balances": [
          {
            "balanceName": "cccccccc",
            "closingBalance": "A",
            "dateType": "A",
            "debitTotalAmount": "",
            "creditTotalAmount": "bbbbbbbb",
            "timeStamp": "dddd"
          }
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "DDDDDDDDD",
        "dormancyStatus": "",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "cccccccc",
            "currency": "ddd",
            "multiCurrencyAccountBalances": [
              {
                "currency": "aaaaaaa",
                "balances": [
                  {
                    "balanceName": "eeeeee",
                    "closingBalance": "",
                    "dateType": "EEEEEE",
                    "debitTotalAmount": "DDDD",
                    "creditTotalAmount": "eeeeeeeee",
                    "timeStamp": "ccccc"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "alternateReferences": [
      {
        "alternateIdType": "eeeeeeeee",
        "alternateId": "CCCCC"
      }
    ],
    "party": [
      {
        "partyReference": "eeeeeeeee",
        "partyRole": "bbbbbbbbb"
      }
    ],
    "repaymentDetails": [
      {
        "effectiveDate": "AAAA",
        "schedules": [
          {
            "repaymentType": "B",
            "description": "ddd",
            "paymentMethod": "AAA",
            "paymentFrequency": "dd",
            "paymentFrequencyDescription": "dddddd",
            "payments": [
              {
                "startDate": "bb",
                "endDate": "EEEEEE",
                "numberOfPayments": "e",
                "calculatedPaymentAmount": "AAA"
              }
            ],
            "nextPaymentDate": "EE"
          }
        ]
      }
    ],
    "limit": [
      {
        "limitKey": "DD",
        "limitReference": "EEEE",
        "limitSerial": "CCCCCCCCC"
      }
    ],
    "interest": [
      {
        "rateName": "bbbb",
        "rateDescription": "",
        "interestConditions": [
          {
            "effectiveDate": "BBB",
            "rateTierType": "CCCC",
            "tierDetails": [
              {
                "fixedRate": "BBBBB",
                "floatingIndex": "D",
                "periodicDetails": [
                  {
                    "periodicIndex": "bbbbb",
                    "periodicType": "cc",
                    "periodicRate": "CCCC",
                    "periodicPeriod": "CCC",
                    "periodicMethod": "",
                    "initialResetDate": "AA",
                    "periodicReset": "AAAAAAA",
                    "nextResetDate": "ccccc"
                  }
                ],
                "margins": [
                  {
                    "marginType": "ccccccc",
                    "marginOperand": "b",
                    "marginRate": "c"
                  }
                ],
                "tierAmount": "E",
                "tierPercent": "",
                "effectiveRate": "cccc",
                "linkedRateIndicator": "BBBBBBBB"
              }
            ]
          }
        ]
      }
    ],
    "settlementDetails": [
      {
        "payinSettlement": [
          {
            "payinPaymentTypes": [
              {
                "payinPaymentType": "aaaaaaaaa",
                "description": "AAA"
              }
            ],
            "payinDetails": [
              {
                "payInPoProduct": "eeeee",
                "payInAccount": "B",
                "payInBeneficiary": "ddd"
              }
            ]
          }
        ],
        "payoutSettlement": [
          {
            "payoutDetails": [
              {
                "payoutAccount": "aaaaaaa",
                "payoutBeneficiary": "eeee",
                "payOutPoProduct": "cccccccc"
              }
            ],
            "payOutPropertyClasses": [
              {
                "propertyClassId": "DDDDDDDD",
                "propertyClassName": "CCC"
              }
            ],
            "payOutProperties": [
              {
                "propertyId": "cc",
                "propertyName": "d"
              }
            ]
          }
        ],
        "defaultSettlementAccounts": [
          {
            "defaultSettlementAccount": ""
          }
        ]
      }
    ],
    "officerDetails": [
      {
        "primaryOfficer": "BBBBBBBBB",
        "otherOfficers": [
          {
            "otherOfficer": "c",
            "otherOfficerRole": ""
          }
        ]
      }
    ],
    "productCategoryId": "dddd",
    "shortTitles": [
      {
        "language": "CCCCCCC",
        "shortTitle": "BBBBBBB"
      }
    ],
    "coolingOffDate": "aaaaaaaaa",
    "renewalDate": "EEE"
  }


Setting Overdraft Limit

API
The overdraft limit is set or amended using the following API. The API uses tags to pass the secondary limit amount(the overdraft (OD) amount).

/v1.0.0/holdings/accounts/savingsAccounts/{savingsAccountId}/limits

 

Event
The following event is emanated after the API is executed.

accounts.updateLimit.limitUpdated

 

Event Payload

As before, this event carries the baseDetails, accountBaseDetails and feeDetails. It also carries the newly updated secondary limit amount figures.

limit

Carries the secondary limit (secondaryLimit, secondaryLimitAmount) as part of this business transaction.

Sample Code: Overdraft Limit Updated Event Payload


{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "accountsBaseDetails": [
      {
        "overdraftStatus": "DDDDDDD",
        "dormancyStatus": "ccccccc",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "d",
            "currency": "dddddd",
            "multiCurrencyAccountBalances": [
              {
                "currency": "CCCCCCCC",
                "balances": [
                  {
                    "balanceName": "CCCC",
                    "closingBalance": "BBBBB",
                    "dateType": "",
                    "debitTotalAmount": "b",
                    "creditTotalAmount": "ddddddddd",
                    "timeStamp": "EEEE"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "baseDetails": [
      {
        "contractReference": "ddddddddd",
        "systemReference": "DD",
        "companyReference": "A",
        "eventName": "EEEEEEEE",
        "baseEventIdentifier": "aaaaaaaaa",
        "effectiveDate": "",
        "bookingDate": "cccccc",
        "contractCurrency": "aaaaaa",
        "channel": "ddd",
        "branch": "eeeeeeee",
        "lineOfBusiness": "EEEEEEE",
        "activityDateTimeStamp": "EEEEE",
        "transactionReference": "b",
        "reversalIndicator": true,
        "originationReference": "BBBBBBBBB",
        "contractStatus": "EEEEE",
        "accountId": "ccccc",
        "overdue": "CCCCCC",
        "feeDetails": [
          {
            "feeName": "bbbbbb",
            "feeAmount": "eeee",
            "feeCurrency": "bb",
            "adjustFeeAmount": "DDDDD",
            "adjustFeeReason": "B"
          }
        ],
        "balances": [
          {
            "balanceName": "AA",
            "closingBalance": "DDD",
            "dateType": "CCCCCCCC",
            "debitTotalAmount": "dddd",
            "creditTotalAmount": "EEE",
            "timeStamp": "dddd"
          }
        ]
      }
    ],
    "limit": [
      {
        "secondaryLimit": "eeeeeee",
        "secondaryLimitAmount": ""
      }
    ]
  }

Credit/Debit Account

API
Typically, the credit or debit is performed on AR through a GAI(Generic Accounting interface), which have their own APIs to access the underlying account and adjust the balances. The following APIs give direct access to the account.

/v1.0.0/holdings/accounts/savingsAccounts/{savingsAccountId}/credits

 

/v1.0.0/holdings/accounts/savingsAccounts/{savingsAccountId}/credits

 

Event

These are the events that are emanated when a credit or debit is made to the savings account.


accounts.credit.transactionExecuted

 


accounts.debit.transactionExecuted

 

Event Payload

Both events carry the same payload - they're differentiated through event types so that they can be consumed by the systems which are interested in them.

balances

Carries the details of the balances after the credit/debit. Usually, either the debitTotalAmount is populated, or the creditTotalAmount.

context

Carries information if the debit/credit happened within a specific context – for example, if the credit was performed with 100 rolled coins. These are typically used in pricing 0, if the fee is computed based on the number of rolled coins.

Sample Code: Credit/Debit Event Payload

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "transactionCurrency": "dddddddd",
    "transactionAmount": "ee",
    "contractAmount": "ccccccccc",
    "baseDetails": [
      {
        "contractReference": "EEEEEEEE",
        "systemReference": "",
        "companyReference": "DDDDDD",
        "eventName": "CCCC",
        "baseEventIdentifier": "BBBBB",
        "effectiveDate": "",
        "bookingDate": "b",
        "contractCurrency": "ddddddddd",
        "channel": "EEEE",
        "branch": "AAAAAA",
        "lineOfBusiness": "BBBBBBBB",
        "activityDateTimeStamp": "eeeeee",
        "transactionReference": "CCCCCCCC",
        "reversalIndicator": false,
        "originationReference": "e",
        "contractStatus": "AAAAAAAAA",
        "accountId": "",
        "overdue": "BBB",
        "feeDetails": [
          {
            "feeName": "AAAA",
            "feeAmount": "aaaaaaaaa",
            "feeCurrency": "DDDDDDD",
            "adjustFeeAmount": "",
            "adjustFeeReason": "bbbbb"
          }
        ],
        "balances": [
          {
            "balanceName": "bb",
            "closingBalance": "AAAAAAAAA",
            "dateType": "cccccccc",
            "debitTotalAmount": "A",
            "creditTotalAmount": "A",
            "timeStamp": ""
          }
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "DDDDDDDDD",
        "dormancyStatus": "E",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "EEEEEEEE",
            "currency": "aaaaaaaa",
            "multiCurrencyAccountBalances": [
              {
                "currency": "DDD",
                "balances": [
                  {
                    "balanceName": "C",
                    "closingBalance": "CCC",
                    "dateType": "eeeeee",
                    "debitTotalAmount": "",
                    "creditTotalAmount": "EEEEEE",
                    "timeStamp": "DDDD"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "context": [
      {
        "contextName": "",
        "contextValue": "dddd"
      },
      {
        "contextName": "A",
        "contextValue": "AAAAAA"
      }
    ]
  }
}

Overdraft Ageing

The ageing of overdraft - which occurred with the debit in our lifecycle - is based on the overdraft settings in the accounts TBC. Chasers may also be sent to inform the customer. Because this happens automatically through settings, only the event is discussed here.

Event


accounts.overdraftLimit.limitOverdrawn

 

Event Payload

accountBaseDetails

Carries the overdraft status, indicating the age of the overdraft.

Sample Code: Credit/Debit Event Payload

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "baseDetails": [
      {
        "contractReference": "DDDDDDD",
        "systemReference": "ccccccc",
        "companyReference": "eee",
        "eventName": "EEEEEEEE",
        "baseEventIdentifier": "",
        "effectiveDate": "DDDDDD",
        "bookingDate": "CCCC",
        "contractCurrency": "BBBBB",
        "channel": "",
        "branch": "b",
        "lineOfBusiness": "ddddddddd",
        "activityDateTimeStamp": "EEEE",
        "transactionReference": "AAAAAA",
        "reversalIndicator": true,
        "originationReference": "dddd",
        "contractStatus": "bbb",
        "accountId": "DDDDDDDD",
        "overdue": "e",
        "feeDetails": [
          {
            "feeName": "EEEEEEEE",
            "feeAmount": "AAAAAAA",
            "feeCurrency": "dddddd",
            "adjustFeeAmount": "AAAA",
            "adjustFeeReason": "aaaaaaaaa"
          }
        ],
        "balances": [
          {
            "balanceName": "BBBBBBBB",
            "closingBalance": "BBBBBB",
            "dateType": "DDDDDDDD",
            "debitTotalAmount": "bb",
            "creditTotalAmount": "AAAAAAAAA",
            "timeStamp": "cccccccc"
          },
          
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "EE",
        "dormancyStatus": "aaaaaaa",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "aaaaaaa",
            "currency": "DDD",
            "multiCurrencyAccountBalances": [
              {
                "currency": "CCC",
                "balances": [
                  {
                    "balanceName": "bbbbb",
                    "closingBalance": "",
                    "dateType": "",
                    "debitTotalAmount": "b",
                    "creditTotalAmount": "CCC",
                    "timeStamp": "AAAA"
                  }
                  
   
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}


Set Dormancy

API
Dormancy can be set through an API, if the officer wishes do it this way, or it can be done automatically by the system. This API actions the manual dormancy setting.



/v1.0.0/holdings/accounts/savingsAccounts/{savingsAccountId}/dormancyStatus/{status}

Event
When the dormancy is set, the following event is emitted. (If the dormancy is reset, then accounts.resetDormancy.dormancyReset is emitted instead.)



accounts.set.dormancySet

Event Payload

accountBaseDetails

Carries the latest dormancy status. The value of the dormancy status is a setting in TBC, and banks would have multiple statuses.

Sample Code: Set Dormancy Event Payload

{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "baseDetails": [
      {
        "contractReference": "DDDDDDD",
        "systemReference": "ccccccc",
        "companyReference": "eee",
        "eventName": "EEEEEEEE",
        "baseEventIdentifier": "",
        "effectiveDate": "DDDDDD",
        "bookingDate": "CCCC",
        "contractCurrency": "BBBBB",
        "channel": "",
        "branch": "b",
        "lineOfBusiness": "ddddddddd",
        "activityDateTimeStamp": "EEEE",
        "transactionReference": "AAAAAA",
        "reversalIndicator": true,
        "originationReference": "dddd",
        "contractStatus": "bbb",
        "accountId": "DDDDDDDD",
        "overdue": "e",
        "feeDetails": [
          {
            "feeName": "EEEEEEEE",
            "feeAmount": "AAAAAAA",
            "feeCurrency": "dddddd",
            "adjustFeeAmount": "AAAA",
            "adjustFeeReason": "aaaaaaaaa"
          }
        ],
        "balances": [
          {
            "balanceName": "BBBBBBBB",
            "closingBalance": "BBBBBB",
            "dateType": "DDDDDDDD",
            "debitTotalAmount": "bb",
            "creditTotalAmount": "AAAAAAAAA",
            "timeStamp": "cccccccc"
          },
          
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "EE",
        "dormancyStatus": "aaaaaaa",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "aaaaaaa",
            "currency": "DDD",
            "multiCurrencyAccountBalances": [
              {
                "currency": "CCC",
                "balances": [
                  {
                    "balanceName": "bbbbb",
                    "closingBalance": "",
                    "dateType": "",
                    "debitTotalAmount": "b",
                    "creditTotalAmount": "CCC",
                    "timeStamp": "AAAA"
                  }
                  
   
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}


Close Account

API
An account could be manually closed, based on its dormancy, or at the request of the client.

/v1.0.0/holdings/accounts/savingsAccounts/{savingsAccountId}/accountClosures

Event

accounts.close.accountClosed

Event Payload

contractStatus

Carries a status of 'Closed'.

closureReason

Indicates the reason the account was closed. closureNotes displays any notes the officer entered, and closureDate displays the date the account was closed.

Sample Code: Close Account Event Payload


{
  "specversion": "BBBBBBB",
  "type": "AAAAAAAAA",
  "subject": "DDDDDDDD",
  "source": "eeeee",
  "id": "bbbbbbb",
  "time": "BBBBB",
  "correlationid": "cccccc",
  "serviceid": "ee",
  "channelid": "cc",
  "organizationid": "bbbbbbbb",
  "tenantid": "cccccc",
  "businesskey": "DDDDDDDDD",
  "sequenceno": 1,
  "authorization": "ccccccccc",
  "customfilterid": "eee",
  "operationinstanceid": "ccc",
  "sequenceinstanceid": "e",
  "priority": 1,
  "data": {
    "baseDetails": [
      {
        "contractReference": "DDDDDDD",
        "systemReference": "ccccccc",
        "companyReference": "eee",
        "eventName": "EEEEEEEE",
        "baseEventIdentifier": "",
        "effectiveDate": "DDDDDD",
        "bookingDate": "CCCC",
        "contractCurrency": "BBBBB",
        "channel": "",
        "branch": "b",
        "lineOfBusiness": "ddddddddd",
        "activityDateTimeStamp": "EEEE",
        "transactionReference": "AAAAAA",
        "reversalIndicator": true,
        "originationReference": "dddd",
        "contractStatus": "bbb",
        "accountId": "DDDDDDDD",
        "overdue": "e",
        "feeDetails": [
          {
            "feeName": "EEEEEEEE",
            "feeAmount": "AAAAAAA",
            "feeCurrency": "dddddd",
            "adjustFeeAmount": "AAAA",
            "adjustFeeReason": "aaaaaaaaa"
          }
        ],
        "balances": [
          {
            "balanceName": "BBBBBBBB",
            "closingBalance": "BBBBBB",
            "dateType": "DDDDDDDD",
            "debitTotalAmount": "bb",
            "creditTotalAmount": "AAAAAAAAA",
            "timeStamp": "cccccccc"
          }
        ]
      }
    ],
    "accountsBaseDetails": [
      {
        "overdraftStatus": "EE",
        "dormancyStatus": "aaaaaaa",
        "multiCurrencyAccountIds": [
          {
            "multiCurrencyAccountId": "aaaaaaa",
            "currency": "DDD",
            "multiCurrencyAccountBalances": [
              {
                "currency": "CCC",
                "balances": [
                  {
                    "balanceName": "bbbbb",
                    "closingBalance": "",
                    "dateType": "",
                    "debitTotalAmount": "b",
                    "creditTotalAmount": "CCC",
                    "timeStamp": "AAAA"
                  },
                  {
                    "balanceName": "",
                    "closingBalance": "CCCCCCCCC",
                    "dateType": "DDDDDDDD",
                    "debitTotalAmount": "aaaaaaa",
                    "creditTotalAmount": "aaaaaaaa",
                    "timeStamp": ""
                  },
                  {
                    "balanceName": "EEEEEEE",
                    "closingBalance": "ddddddd",
                    "dateType": "",
                    "debitTotalAmount": "dddd",
                    "creditTotalAmount": "A",
                    "timeStamp": "AAAAAA"
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "closureReason": "cccccccc",
    "closureNotes": "eeeeeeee",
    "closureDate": "eee"
  }
}

Other Lifecycle Scenarios

We've just run through a fairly straightforward Savings Account lifecycle. Other common events that could have happened to the account, during its lifecycle, include the following:

Reserve funds on an account.

a. API: /holdings/accounts/reservedFunds
b. Event: -

Post a withdrawal notice (on notice accounts).

a. API: /holdings/accounts/savingsAccounts/{savingsAccountId}/withdrawalNotices
b. Event: accounts.createNoticeWithdrawal.noticeCreated

Record posting restrictions (such as blocking an account from a debit or credit, or both).

a. API: /holdings/accounts/savingsAccounts/{savingsAccountId}/accounts
b. Event: accounts.updateAccount.accountUpdated

Make multiple Alert messages available. For example, a rule could be created to send an alert if the account balance goes below a specific threshold, or a alert could be requested during a overdraw. Alert messages are different from plain business events as they can be both set rule based, and subscribed specifically by notification systems.

a. Event: accounts.balanceBelow.customerAlertSent
b. Event: accounts.overdrawn.customerAlertSent

Accounting Events

Accounting events are emitted in addition to business events for a variety of banking products, including savings accounts, current accounts, and other kinds of bank account. For more information, see the Accounting Event Lifecycle Guide